#include "score.h"


void initScore( Score *S)
{
	S->x=10;
	S->y=12;
	S->scoreJ=0;
}

/********************* Fonctions pour les collisions *********************/

int mortJoueur(VaisseauJoueur *VJ, TirEnnemi *tirE, VaisseauEnnemi *VE, Terrain *ter, Score *S)
{
    int temp = VJ->vie;

    //Si le joueur touche un tir ennemi
    if((VJ->x == tirE->x && VJ->y == tirE->y) || (VJ->x == tirE->x-1 && VJ->y == tirE->y) ||  (VJ->x == tirE->x+1 && VJ->y == tirE->y))
    {
        temp--;
        initJoueur(VJ,ter);
        initTirE(tirE, VE);
        VJ->vie=temp;
        return 1;
    }
    //Si le joueur touche un vaisseau ennemi
    if((VJ->x == VE->x && VJ->y == VE->y) || (VJ->x == VE->x+1 && VJ->y == VE->y) || (VJ->x == VE->x-1 && VJ->y == VE->y))
    {
        temp--;
        initJoueur(VJ,ter);
        mortEnnemi(VE);
        VJ->vie=temp;
        S->scoreJ+=100;
        return 1;
    }
    //si le joueur touche le decor
    if(ter->tab[VJ->y][VJ->x] == '#')
    {
        temp--;
        initJoueur(VJ,ter);
        VJ->vie=temp;
        return 1;
    }
    return 0;
}

void toucheEnnemi(CelluleTirJ *tempTirJ, ListeVaissE *VE, Score *S)
{

    CelluleVaissE *tempVE = VE->adPremiere;

    // on parcourt la liste des vaisseaux ennemi
    while(tempVE != NULL)
{       // on verifie si le tir touche l'ennemi, si oui on lui enleve une vie
        if((tempTirJ->tir->x == tempVE->vaiss->x && tempTirJ->tir->y == tempVE->vaiss->y) ||
           (tempTirJ->tir->x-1 == tempVE->vaiss->x && tempTirJ->tir->y == tempVE->vaiss->y))
        {
            // si le joueur a le tir de type 2 l'ennemi perd 2 vies sinon 1
            if(tempTirJ->tir->typeTir == 2)
                {
                    tempVE->vaiss->vie-=2;
                    if(tempVE->vaiss->id != '#' ) // si c'est un mur on ne compte pas le score
                    S->scoreJ +=200;
                }
                else
                {
                    tempVE->vaiss->vie--;
                    if(tempVE->vaiss->id != '#' )
                    S->scoreJ +=100;
                }
            finTir(tempTirJ->tir);
            mortEnnemi(tempVE->vaiss);
        }
        if(tempVE->vaiss->id == 'N' || tempVE->vaiss->id == 'K')
        {
            if((tempTirJ->tir->x == tempVE->vaiss->x && tempTirJ->tir->y == tempVE->vaiss->y+1) ||
           (tempTirJ->tir->x-1 == tempVE->vaiss->x && tempTirJ->tir->y == tempVE->vaiss->y+1))
            {
                // si le joueur a le tir de type 2 l'ennemi perd 2 vies sinon 1
                if(tempTirJ->tir->typeTir == 2)
                {
                    tempVE->vaiss->vie-=2;
                    if(tempVE->vaiss->id != '#' ) // si c'est un mur on ne compte pas le score
                    S->scoreJ +=200;
                }
                else
                {
                    tempVE->vaiss->vie--;
                    if(tempVE->vaiss->id != '#' )
                    S->scoreJ +=100;
                }
                finTir(tempTirJ->tir);
                mortEnnemi(tempVE->vaiss);
            }
        }
        tempVE = tempVE->vaisSuiv;
    }
}

int toucheBonus(VaisseauJoueur *VJ, Bonus *jBonus, CelluleTirJ *TirJ)
{
    if((VJ->x == jBonus->x && VJ->y == jBonus->y) || (VJ->x == jBonus->x-1 && VJ->y == jBonus->y))
    {
        if(jBonus->imBonus == 'A')//Si le joueur touche un bonus arme
        {
            TirJ->tir->typeTir = 2;
            finBonus(jBonus);
            return 2;
        }
        else if(jBonus->imBonus == 'V')//Si le joueur touche un bonus vie
        {
            VJ->vie++;
            finBonus(jBonus);
            return 1;
        }
    }
    return 0;
}
